package cn.edu.ctbu.aop.service;

import cn.edu.ctbu.aop.domain.Student;
import cn.edu.ctbu.aop.repository.StudentRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Collections;
import java.util.List;

/**
 * 告诉StudentService这是一个服务类
 */
@Service
public class StudentService implements StudentServiceIn{

    @Autowired
    private StudentRepository studentRepository;

    @Override
    public List<Student> getAll() {
        return List.of();
    }

    public Page<Student> getAll(Pageable pageable){
        return studentRepository.findAll(pageable);
    }

    @Override
    public List<Student> getAll(Example<Student> example) {
        return List.of();
    }

    @Override
    public List<Student> findByName(String studentName) {
        return List.of();
    }

    @Override
    public List<Student> findByNameLike(String studentName) {
        return List.of();
    }

    @Override
    public Student findById(Integer id) {
        return studentRepository.findById(id).get();
    }

    @Override
    public List<Student> getStudentScoreLess(Integer score) {
        return List.of();
    }

    @Override
    public List<Student> searchByName(String name) {
        System.out.println("查询姓名：" + name); // 打印查询条件
        List<Student> students = studentRepository.findByNameLike(name);
        if (students != null && !students.isEmpty()) {
            System.out.println("查询结果：" + students); // 打印查询结果的所有学生信息
            return students; // 返回所有匹配的学生信息
        } else {
            System.out.println("未找到匹配的学生信息"); // 打印未找到匹配的学生信息
            return Collections.emptyList(); // 没有匹配的学生信息时返回空列表
        }
    }

    @Override
    public List<Student> findByCourse(Integer cno) {
        return studentRepository.findByCno(cno);
    }

    @Override
    public Student findByNo(String no) {
        return studentRepository.findByNo(no);
    }

    @Override
    public void deleteById(Integer id) {
        studentRepository.deleteById(id);
    }

    @Override
    public Student save(Student student) {
        return studentRepository.save(student);
    }

    @Override
    public void delete(Integer id) {
        studentRepository.deleteById(id);
    }

    /**
     * 删除单个学生
     * @param student 学生对象
     */
    @Transactional
    public void delete(Student student) {
        studentRepository.delete(student);
    }

    @Override
    public Page<Student> findAll(Pageable pageable) {
        return studentRepository.findAll(pageable);
    }

    @Override
    public Page<Student> findBySex(Integer sex, Pageable pageable) {
        return studentRepository.findBySex(sex, pageable);
    }

    @Override
    public Boolean existsByNo(String no) {
        return studentRepository.existsByNo(no);
    }

    @Override
    public Boolean validUserNameAndPassword(String userName, String password) throws Exception{
        List<Student> students = studentRepository.findByNameAndPassword(userName, password);
        if(students.size()>0){
            //找到用户
            return true;
        }else {
            throw new Exception("出错了，无效的用户名和密码！！！");
        }
    }
//    /**
//     * 按id进行查询
//     * @param id 主键，整数
//     * @return
//     */
//    public Student findById(Integer id){
//        return studentRepository.findById(id).orElse(null);
//    }
//    /**
//     * 按no进行查询
//     * @param no 学号,整数
//     * @return
//     */
//    public Student findByNo(String no){
//        return studentRepository.findByNo(no);
//    }
//
//    /**
//     * 按cno查询选课
//     * @param cno 课程号
//     * @return
//     */
//    public List<Student> findByCourse(Integer cno){
//        return studentRepository.findByCno(cno);
//    }
//    /**
//     * 按名字进行查询，Like
//     * @param name 字符串
//     * @return
//     */
//    public List<Student> searchByName(String name) {
//        System.out.println("查询姓名：" + name); // 打印查询条件
//        List<Student> students = studentRepository.findByNameLike(name);
//        if (students != null && !students.isEmpty()) {
//            System.out.println("查询结果：" + students); // 打印查询结果的所有学生信息
//            return students; // 返回所有匹配的学生信息
//        } else {
//            System.out.println("未找到匹配的学生信息"); // 打印未找到匹配的学生信息
//            return Collections.emptyList(); // 没有匹配的学生信息时返回空列表
//        }
//    }
//    /**
//     * 新增学生
//     * @param student 对象
//     * @return
//     */
//    public Student insert(Student student){
//        studentRepository.save(student);
//        return student;
//    }
//    /**
//     * 更新学生
//     * @param student 对象
//     * @return
//     */
//    public Student update(Student student){
//        studentRepository.save(student);
//        return student;
//    }
//    /**
//     * 按id删除学生
//     * @param id 整数
//     */
//    public void deleteById(Integer id){
//        studentRepository.deleteById(id);
//    }
//
//    /**
//     * 检查学号是否已存在
//     * @param no
//     * @return
//     */
//    public boolean existsByNo(String no) {
//        return studentRepository.existsByNo(no);
//    }
//
//    /**
//     * 验证用户名和密码
//     * @param userName
//     * @param password
//     * @return
//     */
//    public Boolean validUserNameAndPassword(String userName, String password){
//        List<Student> students = studentRepository.findByNameAndPassword(userName, password);
//        if(students.size() > 0){
//            //找到用户
//            return true;
//        }
//        return false;
//    }
}
